package pe.com.empresa.web.actions.compras;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import pe.com.empresa.datos.dominio.DepartementoEmpresa;
import pe.com.empresa.datos.dominio.SolicitudRequisicion;
import pe.com.empresa.datos.dominio.SolicitudRequisicionDetalle;
import pe.com.empresa.datos.dominio.Usuario;
import pe.com.empresa.servicios.businessdelegate.ComprasBusinessDelegate;
import pe.com.empresa.servicios.servicio.GenerarSolicitudRequisionService;
import pe.com.empresa.utiles.ActionHelper;
import pe.com.empresa.utiles.ComboUtil;
import pe.com.empresa.utiles.Constantes;
import pe.com.empresa.utiles.EstadoOperacion;
import pe.com.empresa.utiles.GrillaArticulos;

public class GenerarSolicitudRequisicionAction extends ActionHelper {

	private static final long serialVersionUID = 1183651938775455518L;
	
	private String departamentoSolicitante;
	private Integer idDepartamento;
	private String fechaEntrega;
	private Integer prioridad;
	private List<ComboUtil> listaPrioridad = new ArrayList<ComboUtil>();
	private GenerarSolicitudRequisionService servicesCompras = new ComprasBusinessDelegate().getGenerarSolicitudRequisionService();
	//
	private EstadoOperacion estadoOperacion = new EstadoOperacion();
	private String stringJson;

	public GenerarSolicitudRequisicionAction() {
		servicesCompras.setSqlSessionFactory(this.getSqlSessionFactory());
	}

	@Override
	public String execute() throws Exception {
		
		if(!this.validarInicioSesion()){
			System.out.println("Inicio de sesion invalido o expirado!!");
			return ERROR;
		}
		
		this.cargarDepartamento();
		{
			ComboUtil combo = new ComboUtil();
			combo.setValor("1");
			combo.setDescriptivo("Alta");
			this.listaPrioridad.add(combo);
		}
		{
			ComboUtil combo = new ComboUtil();
			combo.setValor("2");
			combo.setDescriptivo("Media");
			this.listaPrioridad.add(combo);
		}
		{
			ComboUtil combo = new ComboUtil();
			combo.setValor("3");
			combo.setDescriptivo("Baja");
			this.listaPrioridad.add(combo);
		}
		// TODO Auto-generated method stub
		return SUCCESS;
	}
	
	@SuppressWarnings("unchecked")
	public String registrarSolicitud(){
		
		
		if(!this.validarInicioSesion()){
			System.out.println("Inicio de sesion invalido o expirado!!");
			return ERROR;
		}
		
		try {
			
			Usuario usuario = (Usuario) this.getSessionContext().getAttribute(Constantes.SESION_USUARIO);
			
			SolicitudRequisicion solicitud = new SolicitudRequisicion();
			solicitud.setIdDepartamento(usuario.getIdDepartamento());
			solicitud.setFechaPedido(new Date());
			solicitud.setFechaEntrega(this.dateFormat(this.fechaEntrega));
			solicitud.setEstado(Constantes.ESTADO_SOLICITUD_GENERADA);
			solicitud.setIdGenerador(usuario.getIdPersona());
			solicitud.setPrioridad(this.prioridad);
			solicitud.setTipo_solicitud(Constantes.TIPO_SOLICITUD_NATURAL);
			
			List<SolicitudRequisicionDetalle> detalle = new ArrayList<SolicitudRequisicionDetalle>();
			List<GrillaArticulos> grilla = (ArrayList<GrillaArticulos>) this.getSessionContext().getAttribute(Constantes.SESION_GRILLA_ARTICULOS);
			if(grilla != null && !grilla.isEmpty()){
				for(GrillaArticulos articulo : grilla){
					SolicitudRequisicionDetalle dt = new SolicitudRequisicionDetalle();
					dt.setCodigoArticulo(articulo.getCodigoArticulo());
					dt.setCantidadArticulo(articulo.getCantidadArticulo());
					dt.setEstadoReposicion(Constantes.ESTADO_REPOSICION_EN_ESPERA);
					detalle.add(dt);
				}
				
				estadoOperacion = servicesCompras.registrarSolicitudRequisicion(solicitud, detalle);
				this.getSessionContext().removeAttribute(Constantes.SESION_GRILLA_ARTICULOS);
				
			}else{
				estadoOperacion.setEstadoOperacion(Constantes.OP_EXCEPTION);
				estadoOperacion.setMensajeEstado("[ERROR] Debe ingresar como minimo un articulo en el detalle.");
			}
			
			stringJson = toJson(estadoOperacion);
			System.out.println(estadoOperacion.toString());
						
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return SUCCESS;
	}
		
	public Integer getIdDepartamento() {
		return idDepartamento;
	}

	public void setIdDepartamento(Integer idDepartamento) {
		this.idDepartamento = idDepartamento;
	}

	public String getDepartamentoSolicitante() {
		return departamentoSolicitante;
	}
	public void setDepartamentoSolicitante(String departamentoSolicitante) {
		this.departamentoSolicitante = departamentoSolicitante;
	}
	public String getFechaEntrega() {
		return fechaEntrega;
	}
	public void setFechaEntrega(String fechaEntrega) {
		this.fechaEntrega = fechaEntrega;
	}

	public Integer getPrioridad() {
		return prioridad;
	}

	public void setPrioridad(Integer prioridad) {
		this.prioridad = prioridad;
	}

	public List<ComboUtil> getListaPrioridad() {
		return listaPrioridad;
	}

	public void setListaPrioridad(List<ComboUtil> listaPrioridad) {
		this.listaPrioridad = listaPrioridad;
	}

	public EstadoOperacion getEstadoOperacion() {
		return estadoOperacion;
	}

	public void setEstadoOperacion(EstadoOperacion estadoOperacion) {
		this.estadoOperacion = estadoOperacion;
	}
	public void cargarDepartamento() throws Exception{
		Usuario usuario = (Usuario) this.getSessionContext().getAttribute(Constantes.SESION_USUARIO);
		if(usuario != null){
			DepartementoEmpresa departamento = servicesCompras.obtenerDepartamento(usuario.getIdDepartamento());
			this.departamentoSolicitante = departamento.getNombreDepartamento();
			this.idDepartamento = usuario.getIdDepartamento();
		}
	}

	public String getStringJson() {
		return stringJson;
	}

	public void setStringJson(String stringJson) {
		this.stringJson = stringJson;
	}
	
}
